home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 36
/
Amiga Format CD36 (1999-01-22)(Future Publishing)(GB)[!][issue 1999-02].iso
/
-seriously_amiga-
/
graphics
/
gfx3d.library
/
examples
/
minifrog.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-12-12
|
43KB
|
1,030 lines
#define WIDTH 160
#define HEIGHT 100
#define DEPTH 8
#define SIZE WIDTH*HEIGHT
#define BPLSIZE SIZE/DEPTH
#define NULL 0
#define GFX_POLYGON 1
#define GFX_FRAME 2
#define GFX_ENVIRONMENT 3
#define GFX_OBJECT 4
#define GFX_CAMERA 5
#define GFX_SHADETABLE 6
#define GFX_NONE 0
#define GFX_FILL_SHADING 0
#define GFX_FLAT_SHADING 1
#define GFX_DEPTH_CUEING 2
#define GFX_DEPTH_SHADING 2
/******************/
/* */
/* STRUTTURE DATI */
/* */
/******************/
#define MEMF_PUBLIC 0x00001
#define MEMF_CHIP 0x00002
#define MEMF_FAST 0x00004
#define MEMF_CLEAR 0x10000
#define MEMF_LARGEST 0x20000
typedef struct BitMap
{
short BytesPerRow;
short Rows;
char Flags;
char Depth;
short Pad;
void * Planes[8];
} BitMap;
typedef struct NewScreen
{
short LeftEdge, TopEdge;
short Width, Height;
short Depth;
char DetailPen, BlockPen;
short ViewModes;
short Type;
void * Font;
char * DefaultTitle;
void * Gadgets;
struct BitMap * CustomBitMap;
} NewScreen;
#define SCREENTYPE 0x0F
#define WBENCHSCREEN 0x01
#define PUBLICSCREEN 0x02
#define CUSTOMSCREEN 0x0F
#define SHOWTITLE 0x10
#define BEEPING 0x20
#define CUSTOMBITMAP 0x40
typedef struct rl_RGB
{
unsigned char Red, Green, Blue;
char paddle;
} rl_RGB;
/***************/
/* */
/* PROTOTIPI */
/* */
/***************/
unsigned long ReadJoystick( unsigned long joynum );
long ReadDeltaXMouse (unsigned long portnum);
long ReadDeltaYMouse (unsigned long portnum);
void * BuildFrame( short *points, short *polygons, long scale, long offset );
/***********************/
/* */
/* VARIABILI GLOBALI */
/* */
/***********************/
long total=0;
/*************************/
/* */
/* FUNZIONE PRINCIPALE */
/* */
/*************************/
void * GfxBase;
void * IntuitionBase;
void * GfX3dBase;
struct BitMap MyBitMap;
struct NewScreen MyNewScreen = {
0, 0, WIDTH, HEIGHT, DEPTH,
1, 0,
0,
CUSTOMSCREEN | CUSTOMBITMAP,
0,
"GfX3d shared library v2.1 ©1998",
0,
NULL
};
void * MyScreen;
unsigned long *View;
unsigned long ViewPort;
void * memptr;
long trigonometry;
void *polygon, *frame, *object, *env, *cam;
void *groundenv, *groundcam;
unsigned long RGB32[] =
{
0x01000000,0x00000000,0x00000000,0x00000000,0xa0a0a0a0,0xa0a0a0a0,
0xa0a0a0a0,0x00000000,0xaaaaaaaa,0x00000000,0x00000000,0xaaaaaaaa,
0xaaaaaaaa,0xaaaaaaaa,0x00000000,0x00000000,0xaaaaaaaa,0x00000000,
0xaaaaaaaa,0xaaaaaaaa,0x55555555,0x00000000,0xaaaaaaaa,0xaaaaaaaa,
0xaaaaaaaa,0x55555555,0x55555555,0x55555555,0x55555555,0x55555555,
0xffffffff,0x55555555,0xffffffff,0x55555555,0x55555555,0xffffffff,
0xffffffff,0xffffffff,0x55555555,0x55555555,0xffffffff,0x55555555,
0xffffffff,0xffffffff,0xffffffff,0x55555555,0xffffffff,0xffffffff,
0xffffffff,0xefefefef,0xefefefef,0xefefefef,0xdfdfdfdf,0xdfdfdfdf,
0xdfdfdfdf,0xd3d3d3d3,0xd3d3d3d3,0xd3d3d3d3,0xc3c3c3c3,0xc3c3c3c3,
0xc3c3c3c3,0xb7b7b7b7,0xb7b7b7b7,0xb7b7b7b7,0xabababab,0xabababab,
0xabababab,0x9b9b9b9b,0x9b9b9b9b,0x9b9b9b9b,0x8f8f8f8f,0x8f8f8f8f,
0x8f8f8f8f,0x7f7f7f7f,0x7f7f7f7f,0x7f7f7f7f,0x73737373,0x73737373,
0x73737373,0x67676767,0x67676767,0x67676767,0x57575757,0x57575757,
0x57575757,0x4b4b4b4b,0x4b4b4b4b,0x4b4b4b4b,0x3b3b3b3b,0x3b3b3b3b,
0x3b3b3b3b,0x2f2f2f2f,0x2f2f2f2f,0x2f2f2f2f,0x23232323,0x23232323,
0x23232323,0xffffffff,0x00000000,0x00000000,0xefefefef,0x00000000,
0x00000000,0xe3e3e3e3,0x00000000,0x00000000,0xd7d7d7d7,0x00000000,
0x00000000,0xcbcbcbcb,0x00000000,0x00000000,0xbfbfbfbf,0x00000000,
0x00000000,0xb3b3b3b3,0x00000000,0x00000000,0xa7a7a7a7,0x00000000,
0x00000000,0x9b9b9b9b,0x00000000,0x00000000,0x8b8b8b8b,0x00000000,
0x00000000,0x7f7f7f7f,0x00000000,0x00000000,0x73737373,0x00000000,
0x00000000,0x67676767,0x00000000,0x00000000,0x5b5b5b5b,0x00000000,
0x00000000,0x4f4f4f4f,0x00000000,0x00000000,0x40404040,0x00000000,
0x00000000,0xffffffff,0xdadadada,0xdadadada,0xffffffff,0xbabababa,
0xbabababa,0xffffffff,0x9f9f9f9f,0x9f9f9f9f,0xffffffff,0x7f7f7f7f,
0x7f7f7f7f,0xffffffff,0x5f5f5f5f,0x5f5f5f5f,0xffffffff,0x40404040,
0x40404040,0xffffffff,0x20202020,0x20202020,0xffffffff,0x00000000,
0x00000000,0xfcfcfcfc,0xa8a8a8a8,0x5c5c5c5c,0xfcfcfcfc,0x98989898,
0x40404040,0xfcfcfcfc,0x88888888,0x20202020,0xfcfcfcfc,0x78787878,
0x00000000,0xe4e4e4e4,0x6c6c6c6c,0x00000000,0xcccccccc,0x60606060,
0x00000000,0xb4b4b4b4,0x54545454,0x00000000,0x9c9c9c9c,0x4c4c4c4c,
0x00000000,0xfcfcfcfc,0xfcfcfcfc,0xd8d8d8d8,0xfcfcfcfc,0xfcfcfcfc,
0xb8b8b8b8,0xfcfcfcfc,0xfcfcfcfc,0x9c9c9c9c,0xfcfcfcfc,0xfcfcfcfc,
0x7c7c7c7c,0xfcfcfcfc,0xf8f8f8f8,0x5c5c5c5c,0xfcfcfcfc,0xf4f4f4f4,
0x40404040,0xfcfcfcfc,0xf4f4f4f4,0x20202020,0xfcfcfcfc,0xf4f4f4f4,
0x00000000,0xe4e4e4e4,0xd8d8d8d8,0x00000000,0xcccccccc,0xc4c4c4c4,
0x00000000,0xb4b4b4b4,0xacacacac,0x00000000,0x9c9c9c9c,0x9c9c9c9c,
0x00000000,0x84848484,0x84848484,0x00000000,0x70707070,0x6c6c6c6c,
0x00000000,0x58585858,0x54545454,0x00000000,0x40404040,0x40404040,
0x00000000,0xd0d0d0d0,0xfcfcfcfc,0x5c5c5c5c,0xc4c4c4c4,0xfcfcfcfc,
0x40404040,0xb4b4b4b4,0xfcfcfcfc,0x20202020,0xa0a0a0a0,0xfcfcfcfc,
0x00000000,0x90909090,0xe4e4e4e4,0x00000000,0x80808080,0xcccccccc,
0x00000000,0x74747474,0xb4b4b4b4,0x00000000,0x60606060,0x9c9c9c9c,
0x00000000,0xd8d8d8d8,0xfcfcfcfc,0xd8d8d8d8,0xbcbcbcbc,0xfcfcfcfc,
0xb8b8b8b8,0x9c9c9c9c,0xfcfcfcfc,0x9c9c9c9c,0x80808080,0xfcfcfcfc,
0x7c7c7c7c,0x60606060,0xfcfcfcfc,0x5c5c5c5c,0x40404040,0xfcfcfcfc,
0x40404040,0x20202020,0xfcfcfcfc,0x20202020,0x00000000,0xfcfcfcfc,
0x00000000,0x00000000,0xffffffff,0x00000000,0x00000000,0xefefefef,
0x00000000,0x00000000,0xe3e3e3e3,0x00000000,0x00000000,0xd7d7d7d7,
0x00000000,0x07070707,0xcbcbcbcb,0x00000000,0x07070707,0xbfbfbfbf,
0x00000000,0x07070707,0xb3b3b3b3,0x00000000,0x07070707,0xa7a7a7a7,
0x00000000,0x07070707,0x9b9b9b9b,0x00000000,0x07070707,0x8b8b8b8b,
0x00000000,0x07070707,0x7f7f7f7f,0x00000000,0x07070707,0x73737373,
0x00000000,0x07070707,0x67676767,0x00000000,0x07070707,0x5b5b5b5b,
0x00000000,0x07070707,0x4f4f4f4f,0x00000000,0x04040404,0x40404040,
0x00000000,0xdadadada,0xffffffff,0xffffffff,0xb8b8b8b8,0xfcfcfcfc,
0xfcfcfcfc,0x9c9c9c9c,0xfcfcfcfc,0xfcfcfcfc,0x7c7c7c7c,0xfcfcfcfc,
0xf8f8f8f8,0x5c5c5c5c,0xfcfcfcfc,0xfcfcfcfc,0x40404040,0xfcfcfcfc,
0xfcfcfcfc,0x20202020,0xfcfcfcfc,0xfcfcfcfc,0x00000000,0xfcfcfcfc,
0xfcfcfcfc,0x00000000,0xe4e4e4e4,0xe4e4e4e4,0x00000000,0xcccccccc,
0xcccccccc,0x00000000,0xb4b4b4b4,0xb4b4b4b4,0x00000000,0x9c9c9c9c,
0x9c9c9c9c,0x00000000,0x84848484,0x84848484,0x00000000,0x70707070,
0x70707070,0x00000000,0x58585858,0x58585858,0x00000000,0x40404040,
0x40404040,0x5c5c5c5c,0xbcbcbcbc,0xfcfcfcfc,0x40404040,0xb0b0b0b0,
0xfcfcfcfc,0x20202020,0xa8a8a8a8,0xfcfcfcfc,0x00000000,0x9c9c9c9c,
0xfcfcfcfc,0x00000000,0x8c8c8c8c,0xe4e4e4e4,0x00000000,0x7c7c7c7c,
0xcccccccc,0x00000000,0x6c6c6c6c,0xb4b4b4b4,0x00000000,0x5c5c5c5c,
0x9c9c9c9c,0xdadadada,0xdadadada,0xffffffff,0xbabababa,0xbfbfbfbf,
0xffffffff,0x9f9f9f9f,0x9f9f9f9f,0xffffffff,0x7f7f7f7f,0x80808080,
0xffffffff,0x5f5f5f5f,0x60606060,0xffffffff,0x40404040,0x40404040,
0xffffffff,0x20202020,0x25252525,0xffffffff,0x00000000,0x05050505,
0xffffffff,0x00000000,0x00000000,0xffffffff,0x00000000,0x00000000,
0xefefefef,0x00000000,0x00000000,0xe3e3e3e3,0x00000000,0x00000000,
0xd7d7d7d7,0x00000000,0x00000000,0xcbcbcbcb,0x00000000,0x00000000,
0xbfbfbfbf,0x00000000,0x00000000,0xb3b3b3b3,0x00000000,0x00000000,
0xa7a7a7a7,0x00000000,0x00000000,0x9b9b9b9b,0x00000000,0x00000000,
0x8b8b8b8b,0x00000000,0x00000000,0x7f7f7f7f,0x00000000,0x00000000,
0x73737373,0x00000000,0x00000000,0x67676767,0x00000000,0x00000000,
0x5b5b5b5b,0x00000000,0x00000000,0x4f4f4f4f,0x00000000,0x00000000,
0x40404040,0xf0f0f0f0,0xdadadada,0xffffffff,0xe5e5e5e5,0xbabababa,
0xffffffff,0xdadadada,0x9f9f9f9f,0xffffffff,0xd0d0d0d0,0x7f7f7f7f,
0xffffffff,0xcacacaca,0x5f5f5f5f,0xffffffff,0xbfbfbfbf,0x40404040,
0xffffffff,0xb5b5b5b5,0x20202020,0xffffffff,0xaaaaaaaa,0x00000000,
0xffffffff,0x9a9a9a9a,0x00000000,0xe5e5e5e5,0x80808080,0x00000000,
0xcfcfcfcf,0x75757575,0x00000000,0xb5b5b5b5,0x60606060,0x00000000,
0x9f9f9f9f,0x50505050,0x00000000,0x85858585,0x45454545,0x00000000,
0x70707070,0x35353535,0x00000000,0x5a5a5a5a,0x2a2a2a2a,0x00000000,
0x40404040,0xffffffff,0xdadadada,0xffffffff,0xffffffff,0xbabababa,
0xffffffff,0xffffffff,0x9f9f9f9f,0xffffffff,0xffffffff,0x7f7f7f7f,
0xffffffff,0xffffffff,0x5f5f5f5f,0xffffffff,0xffffffff,0x40404040,
0xffffffff,0xffffffff,0x20202020,0xffffffff,0xffffffff,0x00000000,
0xffffffff,0xe0e0e0e0,0x00000000,0xe5e5e5e5,0xcacacaca,0x00000000,
0xcfcfcfcf,0xb5b5b5b5,0x00000000,0xb5b5b5b5,0x9f9f9f9f,0x00000000,
0x9f9f9f9f,0x85858585,0x00000000,0x85858585,0x6f6f6f6f,0x00000000,
0x70707070,0x5a5a5a5a,0x00000000,0x5a5a5a5a,0x40404040,0x00000000,
0x40404040,0xffffffff,0xe9e9e9e9,0xdededede,0xf7f7f7f7,0xdddddddd,
0xd0d0d0d0,0xf0f0f0f0,0xd1d1d1d1,0xc3c3c3c3,0xe9e9e9e9,0xc7c7c7c7,
0xb7b7b7b7,0xe1e1e1e1,0xbabababa,0xaaaaaaaa,0xdadadada,0xb0b0b0b0,
0x9e9e9e9e,0xd3d3d3d3,0xa4a4a4a4,0x94949494,0xcccccccc,0x9b9b9b9b,
0x89898989,0xc5c5c5c5,0x90909090,0x80808080,0xbebebebe,0x86868686,
0x76767676,0xb6b6b6b6,0x7c7c7c7c,0x6b6b6b6b,0xafafafaf,0x73737373,
0x63636363,0xa8a8a8a8,0x6b6b6b6b,0x5a5a5a5a,0xa1a1a1a1,0x61616161,
0x52525252,0x9a9a9a9a,0x59595959,0x4a4a4a4a,0x93939393,0x50505050,
0x43434343,0x8b8b8b8b,0x48484848,0x3b3b3b3b,0x84848484,0x3f3f3f3f,
0x34343434,0x7e7e7e7e,0x39393939,0x2e2e2e2e,0x77777777,0x31313131,
0x28282828,0x70707070,0x2c2c2c2c,0x23232323,0x69696969,0x26262626,
0x1d1d1d1d,0x61616161,0x1f1f1f1f,0x18181818,0x5a5a5a5a,0x1b1b1b1b,
0x14141414,0x53535353,0x15151515,0x10101010,0x4c4c4c4c,0x11111111,
0x0d0d0d0d,0x45454545,0x0c0c0c0c,0x09090909,0x3e3e3e3e,0x09090909,
0x07070707,0x36363636,0x05050505,0x04040404,0x2f2f2f2f,0x03030303,
0x02020202,0x28282828,0x01010101,0x01010101,0x21212121,0x00000000,
0x00000000,0xffffffff,0x58585858,0x58585858,0xffffffff,0xbebebebe,
0x80808080,0xffffffff,0xfefefefe,0x82828282,0x82828282,0xffffffff,
0x84848484,0x80808080,0xffffffff,0xffffffff,0x80808080,0x80808080,
0xffffffff,0xbfbfbfbf,0x80808080,0xffffffff,0xfefefefe,0x80808080,
0xffffffff,0xc7c7c7c7,0x2b2b2b2b,0x2b2b2b2b,0xc7c7c7c7,0x4f4f4f4f,
0x2b2b2b2b,0xc7c7c7c7,0x77777777,0x2b2b2b2b,0xc7c7c7c7,0x9f9f9f9f,
0x2b2b2b2b,0xc7c7c7c7,0xc7c7c7c7,0x2b2b2b2b,0x9f9f9f9f,0xc7c7c7c7,
0x2b2b2b2b,0x77777777,0xc7c7c7c7,0x2b2b2b2b,0x4f4f4f4f,0xc7c7c7c7,
0x2b2b2b2b,0x2b2b2b2b,0xc7c7c7c7,0x33333333,0x2b2b2b2b,0xc7c7c7c7,
0x5f5f5f5f,0x2b2b2b2b,0xc7c7c7c7,0x8b8b8b8b,0x2b2b2b2b,0xc7c7c7c7,
0xb7b7b7b7,0x2b2b2b2b,0xabababab,0xc7c7c7c7,0x2b2b2b2b,0x7f7f7f7f,
0xc7c7c7c7,0x2b2b2b2b,0x53535353,0xc7c7c7c7,0x2f2f2f2f,0x2b2b2b2b,
0xc7c7c7c7,0x5b5b5b5b,0x2b2b2b2b,0xc7c7c7c7,0x87878787,0x2b2b2b2b,
0xc7c7c7c7,0xb3b3b3b3,0x2b2b2b2b,0xc7c7c7c7,0xc7c7c7c7,0x2b2b2b2b,
0xafafafaf,0xc7c7c7c7,0x2b2b2b2b,0x83838383,0xc7c7c7c7,0x2b2b2b2b,
0x57575757,0xc7c7c7c7,0x2b2b2b2b,0x2b2b2b2b,0xffffffff,0xffffffff,
0xffffffff,0x00000000,
};
unsigned long RGB8bit[] =
{
0x00c7ffff,0x00a0a0a0,0x0000aa00,0x0000aaaa,0x00aa0000,0x00aa00aa,
0x00aa5500,0x00aaaaaa,0x00555555,0x005555ff,0x0055ff55,0x0055ffff,
0x00ff5555,0x00ff55ff,0x00ffff55,0x00ffffff,0x00efefef,0x00dfdfdf,
0x00d3d3d3,0x00c3c3c3,0x00b7b7b7,0x00ababab,0x009b9b9b,0x008f8f8f,
0x007f7f7f,0x00737373,0x00676767,0x00575757,0x004b4b4b,0x003b3b3b,
0x002f2f2f,0x00232323,0x00ff0000,0x00ef0000,0x00e30000,0x00d70000,
0x00cb0000,0x00bf0000,0x00b30000,0x00a70000,0x009b0000,0x008b0000,
0x007f0000,0x00730000,0x00670000,0x005b0000,0x004f0000,0x00400000,
0x00ffdada,0x00ffbaba,0x00ff9f9f,0x00ff7f7f,0x00ff5f5f,0x00ff4040,
0x00ff2020,0x00ff0000,0x00fca85c,0x00fc9840,0x00fc8820,0x00fc7800,
0x00e46c00,0x00cc6000,0x00b45400,0x009c4c00,0x00fcfcd8,0x00fcfcb8,
0x00fcfc9c,0x00fcfc7c,0x00fcf85c,0x00fcf440,0x00fcf420,0x00fcf400,
0x00e4d800,0x00ccc400,0x00b4ac00,0x009c9c00,0x00848400,0x00706c00,
0x00585400,0x00404000,0x00d0fc5c,0x00c4fc40,0x00b4fc20,0x00a0fc00,
0x0090e400,0x0080cc00,0x0074b400,0x00609c00,0x00d8fcd8,0x00bcfcb8,
0x009cfc9c,0x0080fc7c,0x0060fc5c,0x0040fc40,0x0020fc20,0x0000fc00,
0x0000ff00,0x0000ef00,0x0000e300,0x0000d700,0x0007cb00,0x0007bf00,
0x0007b300,0x0007a700,0x00079b00,0x00078b00,0x00077f00,0x00077300,
0x00076700,0x00075b00,0x00074f00,0x00044000,0x00daffff,0x00b8fcfc,
0x009cfcfc,0x007cfcf8,0x005cfcfc,0x0040fcfc,0x0020fcfc,0x0000fcfc,
0x0000e4e4,0x0000cccc,0x0000b4b4,0x00009c9c,0x00008484,0x00007070,
0x00005858,0x00004040,0x005cbcfc,0x0040b0fc,0x0020a8fc,0x00009cfc,
0x00008ce4,0x00007ccc,0x00006cb4,0x00005c9c,0x00dadaff,0x00babfff,
0x009f9fff,0x007f80ff,0x005f60ff,0x004040ff,0x002025ff,0x000005ff,
0x000000ff,0x000000ef,0x000000e3,0x000000d7,0x000000cb,0x000000bf,
0x000000b3,0x000000a7,0x0000009b,0x0000008b,0x0000007f,0x00000073,
0x00000067,0x0000005b,0x0000004f,0x00000040,0x00f0daff,0x00e5baff,
0x00da9fff,0x00d07fff,0x00ca5fff,0x00bf40ff,0x00b520ff,0x00aa00ff,
0x009a00e5,0x008000cf,0x007500b5,0x0060009f,0x00500085,0x00450070,
0x0035005a,0x002a0040,0x00ffdaff,0x00ffbaff,0x00ff9fff,0x00ff7fff,
0x00ff5fff,0x00ff40ff,0x00ff20ff,0x00ff00ff,0x00e000e5,0x00ca00cf,
0x00b500b5,0x009f009f,0x00850085,0x006f0070,0x005a005a,0x00400040,
0x00ffe9de,0x00f7ddd0,0x00f0d1c3,0x00e9c7b7,0x00e1baaa,0x00dab09e,
0x00d3a494,0x00cc9b89,0x00c59080,0x00be8676,0x00b67c6b,0x00af7363,
0x00a86b5a,0x00a16152,0x009a594a,0x00935043,0x008b483b,0x00843f34,
0x007e392e,0x00773128,0x00702c23,0x0069261d,0x00611f18,0x005a1b14,
0x00531510,0x004c110d,0x00450c09,0x003e0907,0x00360504,0x002f0302,
0x00280101,0x00210000,0x00ff5858,0x00ffbe80,0x00fffe82,0x0082ff84,
0x0080ffff,0x008080ff,0x00bf80ff,0x00fe80ff,0x00c72b2b,0x00c74f2b,
0x00c7772b,0x00c79f2b,0x00c7c72b,0x009fc72b,0x0077c72b,0x004fc72b,
0x002bc733,0x002bc75f,0x002bc78b,0x002bc7b7,0x002babc7,0x002b7fc7,
0x002b53c7,0x002f2bc7,0x005b2bc7,0x00872bc7,0x00b32bc7,0x00c72baf,
0x00c72b83,0x00c72b57,0x00c72b2b,0x00000000
};
struct rl_RGB palette[256];
short ground_points[] =
{
2, 0, 0, 1, 0, 0, 1, 0, -1, 2, 0, -1, 1, 0, -2, 2, 0, -2,
0, 0, -1, -1, 0, -1, -1, 0, -2, 0, 0, -2, 0, 0, 0, -1, 0, 0,
-2, 0, 0, -2, 0, -1, -2, 0, -2, 1, 0, 2, 0, 0, 2, 0, 0, 1,
1, 0, 1, -1, 0, 1, -2, 0, 1, -1, 0, 2, -2, 0, 2, 2, 0, 1,
2, 0, 2
};
short ground_poly[] =
{
16,
4, 3, 2, 1, 0, 2, 4, 5, 4, 2, 3, 2, 4, 9, 8, 7, 6, 2,
4, 6, 7, 11, 10, 2, 4, 7, 13, 12, 11, 2, 4, 8, 14, 13, 7, 2,
4, 4, 9, 6, 2, 2, 4, 2, 6, 10, 1, 2, 4, 18, 17, 16, 15, 2,
4, 1, 10, 17, 18, 2, 4, 11, 12, 20, 19, 2, 4, 19, 20, 22, 21, 2,
4, 17, 19, 21, 16, 2, 4, 10, 11, 19, 17, 2, 4, 0, 1, 18, 23, 2,
4, 23, 18, 15, 24, 2
};
short pino_points[] =
{
8, 84, 8, 16, 74, 16, 18, 62, 18, 16, 50, 16, 4, 40, 4,
10, 86, 2, 22, 74, 0, 26, 64, 0, 22, 48, -2, 4, 40, 0,
10, 84, -8, 14, 76, -14, 18, 64, -18, 14, 48, -16, 4, 40, -4,
-2, 86, -10, 2, 74, -20, -2, 60, -24, 0, 50, -20, 0, 40, -4,
-8, 84, -8, -14, 74, -16, -18, 62, -18, -16, 50, -16, -4, 40, -4,
-12, 84, 0, -22, 74, -2, -24, 62, -2, -20, 48, -2, -4, 40, 0,
-8, 84, 6, -16, 72, 14, -18, 62, 18, -16, 50, 18, -4, 40, 4,
0, 88, 0, 2, 82, 12, 0, 74, 22, 2, 62, 26, 2, 48, 20,
0, 40, 4, 4, 20, 4, 4, 0, 4, 6, 20, 0, 6, 0, 0,
4, 20, -4, 4, 0, -4, 0, 20, -6, 0, 0, -6, -4, 20, -4,
-4, 0, -4, -4, 20, 0, -6, 0, 0, -4, 20, 4, -4, 0, 4,
0, 20, 4, 0, 0, 6
};
short pino_poly[] =
{
56,
3, 36, 0, 35, 10, 4, 37, 1, 0, 36, 10, 4, 38, 2, 1, 37, 10,
4, 39, 3, 2, 38, 10, 4, 40, 4, 3, 39, 10, 3, 0, 5, 35, 10,
4, 1, 6, 5, 0, 10, 4, 2, 7, 6, 1, 10, 4, 3, 8, 7, 2, 10,
4, 4, 9, 8, 3, 10, 3, 5, 10, 35, 10, 4, 6, 11, 10, 5, 10,
4, 7, 12, 11, 6, 10, 4, 8, 13, 12, 7, 10, 4, 9, 14, 13, 8, 10,
3, 10, 15, 35, 10, 4, 11, 16, 15, 10, 10, 4, 12, 17, 16, 11, 10,
4, 13, 18, 17, 12, 10, 4, 14, 19, 18, 13, 10, 3, 15, 20, 35, 10,
4, 16, 21, 20, 15, 10, 4, 17, 22, 21, 16, 10, 4, 18, 23, 22, 17, 10,
4, 19, 24, 23, 18, 10, 3, 20, 25, 35, 10, 4, 21, 26, 25, 20, 10,
4, 22, 27, 26, 21, 10, 4, 23, 28, 27, 22, 10, 4, 24, 29, 28, 23, 10,
3, 25, 30, 35, 10, 4, 26, 31, 30, 25, 10, 4, 27, 32, 31, 26, 10,
4, 28, 33, 32, 27, 10, 4, 29, 34, 33, 28, 10, 3, 30, 36, 35, 10,
4, 31, 37, 36, 30, 10, 4, 32, 38, 37, 31, 10, 4, 33, 39, 38, 32, 10,
4, 34, 40, 39, 33, 10, 4, 55, 41, 4, 40, 6, 4, 56, 42, 41, 55, 6,
4, 41, 43, 9, 4, 6, 4, 42, 44, 43, 41, 6, 4, 43, 45, 14, 9, 6,
4, 44, 46, 45, 43, 6, 4, 45, 47, 19, 14, 6, 4, 46, 48, 47, 45, 6,
4, 47, 49, 24, 19, 6, 4, 48, 50, 49, 47, 6, 4, 49, 51, 29, 24, 6,
4, 50, 52, 51, 49, 6, 4, 51, 53, 34, 29, 6, 4, 52, 54, 53, 51, 6,
4, 53, 55, 40, 34, 6, 4, 54, 56, 55, 53, 6
};
short cartello_points[] =
{
2, 8, 0, 3, 0, 0, -1, 0, 0, -2, 8, 0, 10, 9, 0,
9, 18, 0, -11, 16, 0, -10, 7, 0
};
short cartello_poly[] =
{
4,
4, 3, 2, 1, 0, 6, 4, 3, 0, 1, 2, 6, 4, 4, 5, 6, 7, 14, 4, 4, 7, 6, 5, 14
};
short pozzo_points[] =
{
3, 13, -1, 3, 13, 1, 3, 6, 1, 3, 6, -1, -3, 13, -1, -3, 13, 1,
-3, 6, 1, -3, 6, -1, -6, 12, 6, 6, 12, 6, -6, 12, -6, 6, 12, -6,
6, 15, 0, -6, 15, 0, 3, 0, -3, 3, 0, 3, -3, 0, 3, -3, 0, -3,
3, 6, -3, 3, 6, 3, -3, 6, 3, -3, 6, -3, -5, 6, 5, 5, 6, 5,
5, 6, -5, -5, 6, -5, -5, 5, 5, 5, 5, 5, 5, 5, -5, -5, 5, -5,
4, 5, -4, -4, 5, -4, -4, 5, 4, 4, 5, 4, 5, 0, -5, -5, 0, -5,
-5, 0, 5, 5, 0, 5
};
short pozzo_poly[] =
{
25,
4, 3, 2, 1, 0, 6, 4, 3, 0, 1, 2, 6, 4, 7, 6, 5, 4, 6,
4, 7, 4, 5, 6, 6, 4, 12, 13, 10, 11, 6, 4, 12, 11, 10, 13, 6,
4, 13, 8, 9, 12, 6, 4, 13, 12, 9, 8, 6, 4, 15, 16, 20, 19, 5,
4, 14, 18, 21, 17, 5, 4, 14, 15, 19, 18, 5, 4, 17, 21, 20, 16, 5,
4, 14, 17, 16, 15, 255, 4, 23, 19, 20, 22, 15, 4, 24, 18, 19, 23, 15,
4, 25, 21, 18, 24, 15, 4, 25, 22, 20, 21, 15, 4, 24, 28, 29, 25, 15,
4, 26, 27, 23, 22, 15, 4, 22, 25, 29, 26, 15, 4, 28, 24, 23, 27, 15,
4, 34, 35, 31, 30, 7, 4, 32, 31, 35, 36, 7, 4, 37, 34, 30, 33, 7,
4, 36, 37, 33, 32, 7
};
short bat_points[] =
{
39, -6, -8, 30, -10, -8, 49, -9, -8, 46, 12, -4, 41, 3, -8, 30, 6, -8,
30, 25, -2, 15, 5, -6, -41, 3, -8, -30, 6, -8, -30, -10, -8, -39, -6, -8,
-49, -9, -8, -46, 12, -4, -30, 25, -2, -15, 5, -6, -13, 12, -5, -18, 0, -8,
-13, -12, -5, -13, 12, 5, -18, 0, 8, -13, -12, 5, -5, 12, 13, -8, 0, 18,
-5, -12, 13, 5, 12, 13, 8, 0, 18, 5, -12, 13, 13, 12, 5, 18, 0, 8,
13, -12, 5, 13, 12, -5, 18, 0, -8, 13, -12, -5, 5, 12, -13, 8, 0, -18,
5, -12, -13, 0, 18, 0, -5, 12, -13, -8, 0, -18, -5, -12, -13, 0, -18, 0,
0, 15, 8, 0, 5, 8, 3, 15, 18, 3, 5, 18, 13, 15, 18, 13, 5, 18, 16, 15, 8,
16, 5, 8, 8, 20, 11, 8, 15, 2, 8, 5, 2, 8, 0, 11, -16, 15, 8, -16, 5, 8,
-13, 15, 18, -13, 5, 18, -3, 15, 18, -3, 5, 18, -8, 20, 11, -8, 15, 2,
-8, 5, 2, -8, 0, 11
};
short bat_poly[] =
{
90,
3, 6, 3, 4, 4, 3, 6, 4, 5, 4, 3, 6, 4, 3, 4, 3, 6, 5, 4, 4,
3, 0, 4, 2, 4, 3, 5, 4, 0, 4, 3, 5, 0, 1, 4, 3, 7, 5, 1, 4,
3, 0, 2, 4, 4, 3, 5, 0, 4, 4, 3, 5, 1, 0, 4, 3, 7, 1, 5, 4,
3, 4, 3, 2, 4, 3, 7, 6, 5, 4, 3, 4, 2, 3, 4, 3, 7, 5, 6, 4,
3, 42, 61, 60, 15, 3, 63, 43, 59, 15, 4, 59, 43, 42, 58, 15,
3, 58, 42, 60, 15, 3, 63, 59, 57, 15, 4, 57, 59, 58, 56, 255,
3, 56, 58, 60, 15, 3, 63, 57, 55, 15, 4, 55, 57, 56, 54, 15,
3, 54, 56, 60, 15, 3, 63, 55, 62, 15, 4, 62, 55, 54, 61, 15,
3, 61, 54, 60, 15, 3, 53, 52, 49, 15, 4, 49, 52, 51, 48, 15,
3, 48, 51, 50, 15, 3, 53, 49, 47, 15, 4, 47, 49, 48, 46, 15,
3, 46, 48, 50, 15, 3, 53, 47, 45, 15, 4, 45, 47, 46, 44, 255,
3, 44, 46, 50, 15, 3, 53, 45, 43, 15, 4, 43, 45, 44, 42, 15,
3, 42, 44, 50, 15, 3, 51, 42, 50, 15, 3, 41, 40, 36, 6,
4, 36, 40, 39, 35, 6, 4, 35, 39, 38, 34, 6, 3, 34, 38, 37, 6, 3, 41, 36, 33, 6,
4, 33, 36, 35, 32, 6, 4, 32, 35, 34, 31, 6, 3, 31, 34, 37, 6, 3, 41, 33, 30, 6,
4, 30, 33, 32, 29, 6, 4, 29, 32, 31, 28, 6, 3, 28, 31, 37, 6, 3, 41, 30, 27, 6,
4, 27, 30, 29, 26, 6, 4, 26, 29, 28, 25, 6, 3, 25, 28, 37, 6, 3, 41, 27, 24, 6,
4, 24, 27, 26, 23, 6, 4, 23, 26, 25, 22, 6, 3, 22, 25, 37, 6, 3, 41, 24, 21, 6,
4, 21, 24, 23, 20, 6, 4, 20, 23, 22, 19, 6, 3, 19, 22, 37, 6, 3, 41, 21, 18, 6,
4, 18, 21, 20, 17, 6, 4, 17, 20, 19, 16, 6, 3, 16, 19, 37, 6, 3, 41, 18, 40, 6,
4, 40, 18, 17, 39, 6, 4, 39, 17, 16, 38, 6, 3, 38, 16, 37, 6, 3, 15, 14, 9, 4,
3, 8, 13, 12, 4, 3, 15, 9, 14, 4, 3, 8, 12, 13, 4, 3, 15, 9, 10, 4,
3, 9, 11, 10, 4, 3, 9, 8, 11, 4, 3, 11, 8, 12, 4, 3, 15, 10, 9, 4,
3, 9, 10, 11, 4, 3, 9, 11, 8, 4, 3, 11, 12, 8, 4, 3, 14, 8, 9, 4,
3, 14, 13, 8, 4, 3, 14, 9, 8, 4, 3, 14, 8, 13, 4
};
short cane_points[] =
{
16, 5, 11, 8, 5, 11, 18, 0, 14, 6, 0, 14, 11, 0, 0,
6, 0, -10, 18, 0, -10, 8, 5, -13, 16, 5, -13, 11, 0, -24,
-16, 5, -13, -8, 5, -13, -18, 0, -10, -6, 0, -10, -11, 0, -24,
-17, 39, 15, -13, 37, 23, -8, 42, 14, 17, 39, 15, 13, 37, 23,
8, 42, 14, -8, 5, 11, -16, 5, 11, -11, 0, 0, -6, 0, 14,
-18, 0, 14, 0, 21, -31, 0, 30, -29, 8, 28, 0, 8, 23, 7,
14, 13, 7, 6, 5, 7, 8, 3, 0, 17, 15, 1, 8, 3, -18,
8, 28, -18, 17, 15, -20, 0, 16, -27, -8, 28, -18, -8, 28, 0,
-17, 15, -20, -17, 15, 1, -8, 3, -18, -8, 3, 0, -8, 23, 7,
-14, 13, 7, -6, 5, 7, 0, 19, 34, -4, 21, 35, -13, 23, 25,
-16, 23, 15, -8, 23, 9, -14, 13, 9, -17, 13, 18, -6, 5, 9,
-11, 10, 30, -4, 11, 36, -9, 5, 26, 0, 7, 33, 6, 5, 9,
9, 5, 26, 14, 13, 9, 17, 13, 18, 4, 11, 36, 13, 23, 25,
4, 21, 35, 11, 10, 30, 0, 23, 31, 0, 26, 35, 0, 33, 15,
0, 23, 15, 3, 33, 25, 3, 23, 25, 13, 33, 25, 16, 33, 15,
16, 23, 15, 8, 38, 18, 8, 33, 9, 8, 23, 9, -16, 33, 15,
-13, 33, 25, -3, 33, 25, -3, 23, 25, -8, 38, 18, -8, 33, 9
};
short cane_poly[] =
{
109,
3, 4, 1, 0, 6, 3, 4, 0, 2, 6, 3, 3, 1, 4, 6, 4, 3, 2, 0, 1, 6,
3, 4, 2, 3, 6, 3, 9, 6, 5, 6, 4, 5, 6, 8, 7, 6, 3, 5, 7, 9, 6,
3, 9, 8, 6, 6, 3, 9, 7, 8, 6, 3, 14, 10, 11, 6, 3, 14, 12, 10, 6,
3, 13, 14, 11, 6, 4, 13, 11, 10, 12, 6, 3, 14, 13, 12, 6,
3, 17, 16, 15, 6, 3, 17, 15, 16, 6, 3, 20, 19, 18, 6, 3, 20, 18, 19, 6,
3, 23, 24, 25, 6, 4, 24, 21, 22, 25, 6, 3, 24, 23, 21, 6,
3, 23, 25, 22, 6, 3, 23, 22, 21, 6, 3, 27, 26, 37, 6,
3, 27, 37, 26, 6, 4, 43, 32, 31, 46, 6, 4, 39, 44, 29, 28, 6,
4, 38, 39, 28, 35, 6, 4, 42, 34, 32, 43, 6,
3, 37, 38, 35, 6, 3, 37, 34, 42, 6, 4, 36, 35, 28, 33, 6,
4, 36, 33, 32, 34, 6, 4, 33, 28, 29, 30, 6,
4, 33, 30, 31, 32, 6, 3, 37, 36, 34, 6,
3, 37, 35, 36, 6, 3, 37, 40, 38, 6, 3, 37, 42, 40, 6, 4, 41, 43, 46, 45, 6,
4, 41, 45, 44, 39, 6, 4, 40, 42, 43, 41, 6, 4, 40, 41, 39, 38, 6,
4, 78, 29, 44, 51, 14, 4, 30, 29, 78, 61, 14,
4, 59, 31, 30, 61, 14, 4, 46, 31, 59, 54, 14,
4, 45, 46, 54, 52, 14, 4, 44, 45, 52, 51, 14,
3, 70, 78, 51, 6, 4, 54, 59, 60, 57, 6, 3, 57, 60, 58, 6,
3, 58, 63, 56, 6, 3, 56, 63, 47, 6, 3, 55, 48, 49, 6, 3, 55, 56, 48, 6,
3, 56, 47, 48, 6, 3, 49, 53, 55, 6, 3, 53, 49, 50, 6, 3, 50, 52, 53, 6,
3, 51, 52, 50, 6, 3, 57, 55, 53, 6, 3, 54, 53, 52, 6, 3, 54, 57, 53, 6,
3, 56, 55, 57, 6, 3, 58, 56, 57, 6, 3, 58, 60, 63, 6, 3, 63, 60, 66, 6,
3, 59, 62, 60, 6, 3, 59, 61, 62, 6, 3, 60, 62, 66, 6, 3, 78, 75, 61, 6,
3, 75, 62, 61, 6, 3, 62, 75, 64, 6, 3, 64, 66, 62, 6, 3, 63, 65, 47, 6,
3, 66, 65, 63, 6, 3, 66, 64, 65, 6, 3, 47, 65, 48, 6, 3, 48, 67, 49, 6,
3, 67, 82, 49, 6, 3, 65, 64, 67, 6, 3, 67, 64, 72, 6, 3, 67, 72, 82, 6,
3, 70, 82, 72, 6, 3, 65, 68, 48, 255,3, 65, 67, 68, 255,3, 67, 48, 68, 255,
4, 70, 51, 84, 69, 6, 3, 69, 84, 83, 6, 4, 82, 70, 69, 81, 15,
3, 81, 69, 83, 15, 4, 49, 82, 81, 80, 255,3, 80, 81, 83, 15,
4, 50, 49, 80, 79, 15, 3, 79, 80, 83, 15, 4, 51, 50, 79, 84, 6,
3, 84, 79, 83, 6, 4, 75, 78, 77, 74, 6, 3, 74, 77, 76, 6,
4, 64, 75, 74, 73, 15, 3, 73, 74, 76, 15, 4, 72, 64, 73, 71, 255,
3, 71, 73, 76, 15, 4, 70, 72, 71, 69, 15, 3, 69, 71, 76, 15,
4, 78, 70, 69, 77, 6, 3, 77, 69, 76, 6
};
short player_points[] =
{
9, -20, 8, 4, -20, 10, 5, -20, -5, 5, -4, -4, 5, -6, 4,
5, -16, 0, 5, -16, -4, -5, -6, 4, -5, -4, -4, -5, -16, 0,
-5, -16, -4, -4, -20, 10, -9, -20, 8, -5, -20, -5, 10, -3, -1,
10, 3, -1, 14, 1, 5, 10, 5, 7, 10, -5, 7, -14, 1, 5,
-10, 5, 7, -10, -5, 7, -10, -3, -1, -10, 3, -1, 0, -12, -13,
12, -13, -11, -12, -13, -11, 10, 6, -9, -10, 6, -9, 0, 17, -1,
-8, -6, -8, -10, 5, -7, -8, 2, 8, 10, 5, -7, 8, -6, -8,
0, -13, 2, 8, 2, 8, -11, 21, 11, -10, 25, -11, 10, 25, -11,
11, 21, 11, 0, 30, 12, 0, 45, -1, 0, 35, -1, 3, 45, 9,
3, 35, 9, 13, 45, 9, 13, 35, 9, 16, 45, -1, 16, 35, -1,
8, 50, 2, 8, 45, -7, 8, 35, -7, 8, 30, 2, -16, 45, -1,
-16, 35, -1, -13, 45, 9, -13, 35, 9, -3, 45, 9, -3, 35, 9,
-8, 50, 2, -8, 45, -7, -8, 35, -7, -8, 30, 2
};
short player_poly[] =
{
84,
3, 42, 61, 60, 15, 3, 63, 43, 59, 15, 4, 59, 43, 42, 58, 15,
3, 58, 42, 60, 15, 3, 63, 59, 57, 15, 4, 57, 59, 58, 56, 255,
3, 56, 58, 60, 15, 3, 63, 57, 55, 15, 4, 55, 57, 56, 54, 15,
3, 54, 56, 60, 15, 3, 63, 55, 62, 15, 4, 62, 55, 54, 61, 15,
3, 61, 54, 60, 15, 3, 53, 52, 49, 15, 4, 49, 52, 51, 48, 15,
3, 48, 51, 50, 15, 3, 53, 49, 47, 15, 4, 47, 49, 48, 46, 15,
3, 46, 48, 50, 15, 3, 53, 47, 45, 15, 4, 45, 47, 46, 44, 255,
3, 44, 46, 50, 15, 3, 53, 45, 43, 15, 4, 43, 45, 44, 42, 15,
3, 42, 44, 50, 15, 3, 51, 42, 50, 15, 3, 42, 62, 61, 15,
3, 42, 51, 52, 15, 3, 42, 52, 62, 10, 4, 39, 38, 62, 52, 10,
3, 39, 52, 53, 10, 3, 38, 63, 62, 10, 3, 41, 43, 63, 10,
3, 41, 53, 43, 10, 3, 29, 38, 39, 10, 3, 40, 37, 29, 10,
3, 37, 38, 29, 10, 3, 29, 39, 40, 10, 3, 37, 63, 38, 10,
3, 53, 40, 39, 10, 3, 41, 63, 37, 10, 3, 41, 40, 53, 10,
3, 41, 37, 40, 10, 3, 29, 32, 36, 14, 3, 32, 29, 31, 10,
3, 29, 36, 33, 10, 3, 32, 35, 36, 14, 3, 30, 32, 31, 10,
3, 34, 33, 36, 10, 3, 35, 32, 30, 10, 3, 35, 34, 36, 10,
3, 35, 30, 34, 10, 4, 30, 31, 33, 34, 10, 3, 33, 31, 29, 10,
3, 29, 27, 28, 12, 3, 29, 28, 27, 12, 3, 28, 24, 26, 12,
3, 28, 26, 24, 12, 3, 27, 24, 25, 12, 3, 27, 25, 24, 12,
3, 28, 24, 27, 12, 3, 28, 27, 24, 12, 4, 21, 22, 23, 20, 15,
3, 22, 19, 23, 15, 3, 22, 21, 19, 15, 3, 23, 19, 20, 15,
3, 21, 20, 19, 15, 3, 18, 16, 17, 15, 3, 15, 17, 16, 15,
3, 14, 16, 18, 15, 3, 14, 15, 16, 15, 4, 18, 17, 15, 14, 15,
3, 13, 11, 12, 14, 3, 12, 11, 9, 10, 4, 13, 12, 9, 10, 10,
4, 13, 10, 9, 11, 10, 4, 10, 8, 7, 9, 10, 4, 10, 9, 7, 8, 10,
4, 6, 3, 4, 5, 10, 4, 6, 5, 4, 3, 10, 4, 2, 1, 5, 6, 10,
4, 2, 6, 5, 0, 10, 3, 0, 5, 1, 10, 3, 2, 0, 1, 14
};
void *ground_frame, *ground_obj;
void *pozzo_frame, *pozzo_obj;
void *pino_frame, *pino_obj;
void *cartello_frame, *cartello_obj;
void *bat_frame, *bat_obj;
void *cane_frame, *cane_obj;
void *player_frame, *player_obj;
int main (void)
{
long i, j, k;
long x, y, z;
long xp, yp;
unsigned long memptr;
long dist;
long r;
void * Raster;
long sn, cs;
unsigned long joy;
long dxmouse, dymouse;
long v;
long xb, yb, zb, ab, rb;
if ( GfxBase = (void *) OpenLibrary ("graphics.library", 0) )
{
if ( IntuitionBase = (void *) OpenLibrary ("intuition.library", 0) )
{
if ( GfX3dBase = (void *) OpenLibrary ("gfx3d.library", 0) )
{
if ( Raster = (void *) AllocMem ( SIZE , MEMF_CHIP | MEMF_CLEAR ) )
{
InitBitMap ( &MyBitMap, DEPTH, WIDTH, HEIGHT );
memptr = (long) Raster;
for ( k=0 ; k<DEPTH ; k++ )
{
MyBitMap.Planes[k] = (char *) memptr;
memptr += BPLSIZE;
}
MyNewScreen.CustomBitMap = &MyBitMap;
if ( MyScreen = (void *) OpenScreen (&MyNewScreen) )
{
View = (unsigned long *) ViewAddress();
ViewPort = View[0];
LoadRGB32( ViewPort, &RGB32, 256 );
SetRGB4( ViewPort, 0, 12, 15, 15 );
SetRGB4( ViewPort, 255, 0, 0, 0 );
for ( k=0 ; k<256 ; k++ )
{
i = RGB8bit[k];
palette[k].Red = (i >> 16) & 0xFF;
palette[k].Green = (i >> 8) & 0xFF;
palette[k].Blue = i & 0xFF;
}
GFXSetShading( GFX_FLAT_SHADING | GFX_DEPTH_SHADING );
GFXBegin( GFX_ENVIRONMENT );
GFXBegin( GFX_SHADETABLE );
GFXSteps( 12 );
GFXThreshold( 3 );
GFXColor( 0xc7ffff );
GFXFarClip( 2048 );
GFXPalette( (void *) &palette );
GFXShadeTable( GFXEnd() );
GFXBegin( GFX_OBJECT );
ground_frame = BuildFrame( ground_points, ground_poly, GFXFlt( 120 ), 0 );
GFXFrame( ground_frame );
GFXFarClip( 2048 );
GFXPosition( 0, 200, 0 );
ground_obj = (void *) GFXEnd();
GFXObject( ground_obj );
groundenv = (void *) GFXEnd();
GFXBegin( GFX_ENVIRONMENT );
GFXBegin( GFX_SHADETABLE );
GFXSteps( 12 );
GFXThreshold( 3 );
GFXColor( 0xc7ffff );
GFXFarClip( 2048 );
GFXPalette( (void *) &palette );
GFXShadeTable( GFXEnd() );
GFXBegin( GFX_OBJECT );
pozzo_frame = BuildFrame( pozzo_points, pozzo_poly, GFXFlt( 5 ), 0 );
GFXFrame( pozzo_frame );
GFXFarClip( 2048 );
GFXPosition( 0, 200, 0 );
pozzo_obj = (void *) GFXEnd();
GFXObject( pozzo_obj );
GFXBegin( GFX_OBJECT );
pino_frame = BuildFrame( pino_points, pino_poly, GFXFlt( 2 ), 0 );
GFXFrame( pino_frame );
GFXFarClip( 2048 );
GFXPosition( -150, 300, 0 );
pino_obj = (void *) GFXEnd();
GFXObject( pino_obj );
GFXBegin( GFX_OBJECT );
cartello_frame = BuildFrame( cartello_points, cartello_poly, GFXFlt( 2 ), 0 );
GFXFrame( cartello_frame );
GFXFarClip( 2048 );
GFXPosition( 50, 100, 0 );
GFXDirection( 0, 0, -8 );
cartello_obj = (void *) GFXEnd();
GFXObject( cartello_obj );
GFXBegin( GFX_OBJECT );
bat_frame = BuildFrame( bat_points, bat_poly, GFXFlt( 1 ), 0 );
GFXFrame( bat_frame );
GFXFarClip( 2048 );
GFXPosition( 0, 200, 0 );
bat_obj = (void *) GFXEnd();
GFXObject( bat_obj );
GFXBegin( GFX_OBJECT );
cane_frame = BuildFrame( cane_points, cane_poly, GFXFlt( 1 ), 0 );
GFXFrame( cane_frame );
GFXFarClip( 2048 );
GFXPosition( 150, 350, 0 );
GFXDirection( 0, 0, -20 );
cane_obj = (void *) GFXEnd();
GFXObject( cane_obj );
GFXBegin( GFX_OBJECT );
player_frame = BuildFrame( player_points, player_poly, GFXFlt( 1 ), 0 );
GFXFrame( player_frame );
GFXFarClip( 2048 );
GFXPosition( 0, 200, 0 );
player_obj = (void *) GFXEnd();
GFXObject( player_obj );
env = (void *) GFXEnd();
GFXBegin( GFX_CAMERA );
GFXWidth( WIDTH );
GFXHeight( HEIGHT );
GFXVideoBuffer( Raster );
GFXEnvironment( groundenv );
GFXFocus( 256 );
GFXFarClip( 2048 );
GFXAspectRatio( GFXDiv( GFXFlt( 320 ), GFXFlt( WIDTH ) ),
GFXFlt( 1 ),
GFXDiv( GFXFlt( 200 ), GFXFlt( HEIGHT ) ) );
GFXDirection( -10, 0, 0 );
GFXPosition( 0, 0, 100 );
groundcam = (void *) GFXEnd();
GFXBegin( GFX_CAMERA );
GFXWidth( WIDTH );
GFXHeight( HEIGHT );
GFXVideoBuffer( Raster );
GFXShareWorkBuffer( groundcam );
GFXEnvironment( env );
GFXFocus( 256 );
GFXFarClip( 2048 );
GFXAspectRatio( GFXDiv( GFXFlt( 320 ), GFXFlt( WIDTH ) ),
GFXFlt( 1 ),
GFXDiv( GFXFlt( 200 ), GFXFlt( HEIGHT ) ) );
GFXDirection( -10, 0, 0 );
GFXPosition( 0, 0, 100 );
cam = (void *) GFXEnd();
trigonometry = GFXDiv( GFXFlt( 128 ), GFXPi() );
i = 0;
j = 0;
k = 0;
x = 0;
y = 0;
v = 2;
z = GFXFlt( 100 );
xp = GFXFlt( 200 );
yp = GFXFlt( 200 );
xb = 0;
yb = 0;
zb = 0;
ab = 0;
rb = 100;
do
{
sn = GFXSin ( GFXMul ( GFXFlt(ab&255) , trigonometry ) );
cs = GFXCos ( GFXMul ( GFXFlt(ab&255) , trigonometry ) );
xb = GFXFixMul( rb, sn );
yb = GFXFixMul( rb, cs );
sn = GFXSin ( GFXMul ( GFXFlt((ab*16)&255) , trigonometry ) );
zb = GFXFixMul( 10, sn );
ab++;
dxmouse = ReadDeltaXMouse( 0 );
if ( dxmouse > 0 )
{
k -= dxmouse;
}
if ( dxmouse < 0 )
{
k -= dxmouse;
}
dymouse = ReadDeltaYMouse( 0 );
if ( dymouse < 0 )
{
if ( ( j-=dymouse ) > 40 )
{
j = 40;
}
}
if ( dymouse > 0 )
{
if ( ( j-=dymouse ) < -40 )
{
j = -40;
}
}
joy = ReadJoystick( 0 );
if ( joy & 16 )
{
sn = GFXSin ( GFXMul ( GFXFlt(k&255) , trigonometry ) );
cs = GFXCos ( GFXMul ( GFXFlt(k&255) , trigonometry ) );
x += GFXFixMul( j/2 , sn );
y -= GFXFixMul( j/2 , cs );
}
joy = ReadJoystick ( 1 );
if ( joy & 4 )
{
i-=2;
}
else
{
if ( joy & 8 )
{
i+=2;
}
}
if ( joy & 2 )
{
sn = GFXSin ( GFXMul ( GFXFlt(i&255) , trigonometry ) );
cs = GFXCos ( GFXMul ( GFXFlt(i&255) , trigonometry ) );
xp -= GFXFixMul( v , sn );
yp += GFXFixMul( v , cs );
}
else
{
if ( joy & 1 )
{
sn = GFXSin ( GFXMul ( GFXFlt(i&255) , trigonometry ) );
cs = GFXCos ( GFXMul ( GFXFlt(i&255) , trigonometry ) );
xp += GFXFixMul( v , sn );
yp -= GFXFixMul( v , cs );
}
}
GFXModifyCameraPosition( groundcam , GFXFix( x ) , GFXFix( y ) , GFXFix( z ) );
GFXModifyCameraDirection( groundcam , j , dxmouse/2 , k );
GFXUpdateScene( groundcam );
GFXModifyCameraPosition( cam , GFXFix( x ) , GFXFix( y ) , GFXFix( z ) );
GFXModifyCameraDirection( cam , j , dxmouse/2 , k );
GFXModifyObjectPosition( bat_obj, GFXFix( xb ), 200+GFXFix( yb ), 50+GFXFix( zb ) );
GFXModifyObjectDirection( bat_obj, 0, 0, 64-ab );
GFXModifyObjectPosition( player_obj, GFXFix( xp ), GFXFix( yp ), 20 );
GFXModifyObjectDirection( player_obj, 0, 0, i );
GFXUpdateScene( cam );
GFXUpdateVideoBuffer();
GFXClearWorkBuffer();
} while ( !( joy & 16 ) );
Delay ( 50 );
CloseScreen ( MyScreen );
}
FreeMem ( Raster, SIZE );
}
CloseLibrary (GfX3dBase);
}
CloseLibrary (IntuitionBase);
}
CloseLibrary (GfxBase);
}
return NULL;
}
unsigned long ReadJoystick (unsigned long joynum)
{
unsigned long ret = 0;
unsigned short joy;
unsigned short * hardware;
unsigned char * lbutton;
if (joynum == 0)
{
hardware = (unsigned short *) 0xDFF00AL;
}
else
{
hardware = (unsigned short *) 0xDFF00CL;
}
joy = * hardware;
ret += (joy >> 1 ^ joy) & 0x0100 ? 1 : 0;
ret += (joy >> 1 ^ joy) & 0x0001 ? 2 : 0;
ret += joy & 0x0002 ? 4 : 0;
ret += joy & 0x0200 ? 8 : 0;
lbutton = (unsigned char *) 0xBFE001;
joy = * lbutton;
if (joynum == 0)
{
ret += !(joy & 0x0040) ? 16 : 0;
}
else
{
ret += !(joy & 0x0080) ? 16 : 0;
}
return ret;
}
long ReadDeltaXMouse (unsigned long portnum)
{
static char prev=0;
static char init=0;
long ret = 0;
char joy;
unsigned char * hardware;
if ( portnum == 0 )
{
hardware = (unsigned char *) 0xDFF00BL;
}
else
{
hardware = (unsigned char *) 0xDFF00DL;
}
joy = * hardware;
joy /= 2;
if ( init == 0 )
{
prev = joy;
ret = 0;
init = 1;
}
else
{
if ( ( prev>0 && joy>0 ) || ( prev<0 && joy<0 ) )
{
ret = joy - prev;
prev = joy;
}
else
{
ret = joy + prev;
prev = -joy;
}
}
return ret;
}
long ReadDeltaYMouse (unsigned long portnum)
{
static char prev=0;
static char init=0;
long ret = 0;
char joy;
unsigned char * hardware;
if ( portnum == 0 )
{
hardware = (unsigned char *) 0xDFF00AL;
}
else
{
hardware = (unsigned char *) 0xDFF00CL;
}
joy = * hardware;
if ( init == 0 )
{
prev = joy;
ret = 0;
init = 1;
}
else
{
if ( ( prev>0 && joy>0 ) || ( prev<0 && joy<0 ) )
{
ret = joy - prev;
prev = joy;
}
else
{
ret = joy + prev;
prev = -joy;
}
}
return ret;
}
void * BuildFrame ( short *points, short *polygons, long scale,
long offset )
{
long i, k;
long count;
long n;
long index;
long color;
long x, y, z;
long x0, y0, z0;
long x1, y1, z1;
GFXBegin ( GFX_FRAME );
count = polygons[0];
index = 1;
for ( k=1 ; k<=count ; k++ )
{
n = polygons[ index ];
index++;
color = polygons[ index+n ];
GFXSetColor ( color+offset );
x0 = GFXFltMul( scale , points[ polygons[ index ] * 3 ] );
y0 = GFXFltMul( scale , points[ polygons[ index ] * 3 + 1 ] );
z0 = GFXFltMul( scale , points[ polygons[ index ] * 3 + 2 ] );
x1 = GFXFltMul( scale , points[ polygons[ index+1 ] * 3 ] );
y1 = GFXFltMul( scale , points[ polygons[ index+1 ] * 3 + 1 ] );
z1 = GFXFltMul( scale , points[ polygons[ index+1 ] * 3 + 2 ] );
i = 2;
while ( i<n )
{
GFXBegin ( GFX_POLYGON );
GFXVertex ( x0 , -z0 , y0 );
GFXVertex ( x1 , -z1 , y1 );
x = GFXFltMul( scale , points[ polygons[ index+i ] * 3 ] );
y = GFXFltMul( scale , points[ polygons[ index+i ] * 3 + 1 ] );
z = GFXFltMul( scale , points[ polygons[ index+i ] * 3 + 2 ] );
i++;
GFXVertex ( x , -z , y );
GFXPolygon ( GFXEnd () );
total++;
if ( i<n )
{
x1 = x;
y1 = y;
z1 = z;
}
}
index += n+1;
}
return (void *) GFXEnd ();
}